package demo1;


public class Test {
    public static void func(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        //抽象类：如果一个类中没有包含足够的信息来描绘一个具体的对象，这样的类就是抽象类
        //1. 抽象类不能直接实例化对象
        //2. 抽象方法不能是 private 的修饰
        //3. 抽象方法不能被final和static修饰，因为抽象方法要被子类重写
        //4. 抽象类必须被继承，并且继承后子类要重写父类中的抽象方法，否则子类也是抽象类，必须要使用 abstract 修饰
        //5. 抽象类中不一定包含抽象方法，但是有抽象方法的类一定是抽象类
        //6. 抽象类中可以有构造方法，供子类创建对象时，初始化父类的成员变量
        //抽象类作用：使用抽象类相当于多了一重编译器的校验 可以判断是否进行了重写等行为
        // Shape shape = new Shape();//无法进行实例化对象
        func(new Rect());
        func(new Cycle());
        func(new Triangle());
        func(new Flower());
    }
}
